<script>
	import {mapState} from "vuex";
	export default {
		created(){
			this.getSigData()
		},
		computed: {
			...mapState({
				notifyNum:state=>state.notifyNum
			})
		},
		mounted() {
			/**官网有很多关于关于sdk 其他的监听方法（比如：有新的消息，用户资料更新等等）
			 * 详情可对照： https://imsdk-1252463788.file.myqcloud.com/IM_DOC/Web/SDK.html
			 * 监听的含义：服务端发生了数据变更---前端全局可以接收到变更通知--前端就可以自动触发某个事件来更新相应数据
			 * */
			// 登录成功后会触发 SDK_READY 事件，该事件触发后，可正常使用 SDK 接口
			this.tim.on(this.$TIM.EVENT.SDK_READY, this.onReadyStateUpdate, this);
			// 收到新消息
			this.tim.on(this.$TIM.EVENT.MESSAGE_RECEIVED, this.onReceiveMessage);
			// 会话列表更新
			this.tim.on(this.$TIM.EVENT.CONVERSATION_LIST_UPDATED, event => {
				console.log(event,999912122)
				this.$store.commit("updateConversationList", event.data);
			});
		},
		methods: {
			//获取消息列表
			getConversationList() {
				// 拉取会话列表
				let promise = this.tim.getConversationList();
				promise.then((res) => {
					console.log("获取会话列表app", res)
					let conversationList = res.data.conversationList
					if (conversationList.length) {
						//活动通知，系统通知，与我相关
						this.getNotifyNum(conversationList)
						//未读消息总量
						const count= conversationList.map(x=>x.unreadCount).reduce((a,b)=>a+b,0)
						this.setTabbar(count)
						//说明：如果已经将用户信息 提交到tim服务端了 就不需要再次拼接
						this.$store.commit("updateConversationList", conversationList);
					}

				}).catch((err) => {
					console.warn('getConversationList error:', err); // 获取会话列表失败的相关信息
				});
			},
			//获取系统通知数量
			getNotifyNum(list){
				let notify={
					infrom:{},
					relation:{},
					system:{}
				}
				list.forEach(x=>{
					if(x.userProfile.userID == '2'){
						notify.relation=x
					}else if(x.userProfile.userID == '3'){
						notify.system=x
					}else if(x.userProfile.userID == '4'){
						notify.infrom=x
					}
				})
				console.log(notify,1222)
				this.$store.commit('updateNotify',notify)
			},
			//设置底部红点
			setTabbar(count){
				if(!count){
					uni.removeTabBarBadge({
						index: 3, // 底部菜单栏的索引（从0开始）
					});
				}else{
					uni.setTabBarBadge({
						index: 3, // 底部菜单栏的索引（从0开始）
						text:String(count), // 要显示的文本（必须是字符串类型）
					});
				}
				
				this.$store.commit('updateNotifyNum',count)
			},
			//获取UserSig
			getSigData(){
				this.$http.get("/user/user/tim/sig").then(res=>{
					this.login(res.retObject)
				})
			},
			//登录im
			login(userSig){
				const userInfo={
					userId: '31',
					userSig: userSig
				}
				let promise = this.tim.login({
					userID: userInfo.userId,
					userSig: userInfo.userSig
				});
				promise.then((res) => {
					console.log("登录成功")
					//登录成功后 更新登录状态
					this.$store.commit("toggleIsLogin", true);
					//自己平台的用户基础信息
					uni.setStorageSync('userInfo', JSON.stringify(userInfo))
					// //tim 返回的用户信息
					uni.setStorageSync('userTIMInfo', JSON.stringify(res.data))
				}).catch((err) => {
					console.warn('login error:', err); // 登录失败的相关信息
				});
			},
			onReadyStateUpdate({name}) {
				const isSDKReady = name === this.$TIM.EVENT.SDK_READY ? true : false;
				//自动监听并更新 sdk 的ready 状态 （未登录是 notReady  登录后是ready）
				this.$store.commit("toggleIsSDKReady", isSDKReady);
				this.getConversationList()
         //sdk ready 后  肯定完成了登录操作    这里可以获取用户存储在im的基础信息/离线消息/黑名单列表
			},
			//消息更新
			onReceiveMessage({data: messageList}) {
				console.log("消息更新", messageList)
				//消息总量更新
				const count=this.$store.state.notifyNum+1
				this.setTabbar(count)
				//消息列表更新
				this.$store.commit("pushCurrentMessageList", messageList);
			},
			//根据消息列表请求聊天对象的用户信息 并完成数据拼接
		
		},
		onLaunch: function() {
			console.log('App Launch')
		},
		onShow: function() { 
			console.log('App Show')
		},
		onHide: function() {
			console.log('App Hide')
		}

	}
</script> 
<style lang="scss">
	/*每个页面公共css */
	page{
		font-family: OPPOSans, OPPOSans;
		font-size: 24rpx;
		color: #101011;
		font-weight: 400;
	} 
</style>
